package Test.trycatch;


import java.util.HashMap;
import java.util.Map;

/**
 * @Author: guozhenran
 * @Date: 2023/4/25 10:51
 * @Description: finally块中的return语句返回结果会覆盖catch块中的return语句返回结果
 *        即如果try中有return语句，catch中也有return语句，finally中也有return语句，
 *        最终执行的是finally中的return语句（无论是基本数据类型or引用数据类型）
 *
 *      try中发生异常之后，进入catch块，return语句执行完之后进入finally块，
 *      finally块执行完之后，执行return返回语句
 *      对于引用数据类型来说，finally中对返回值的修改（修改引用变量指向对象中的值）会影响try中return返回变量的值
 *      对于引用数据类型来说，finally中对返回值的修改（修改引用变量的地址值）不会影响try中return返回变量的值
 *      （解释：try或catch中的return要返回的值在finally执行之前会拷贝一份）
 */
public class Demo03_2 {
    public static void main(String[] args) {
        System.out.println(getMap());
    }

    public static Map<String, String> getMap() {
        Map<String, String> map = new HashMap<>();
        map.put("KEY", "INIT");
        try {
            map.put("KEY", "try");
            String s = null;
            System.out.println(s.charAt(0));
            return map;
        } catch (Exception e) {
            e.printStackTrace();
            map.put("KEY", "catch");
            return map;
        } finally {
            map.put("KEY", "finally");
            map.remove("KEY");
            map.put("KEY", "finally2");
            map = null;
            System.out.println(map);
            return map;
        }
    }
}